import kart;
import anlatan;
import cizici;
import gorevli;
import hakem;
import masa;
import oyuncu;
/*
 * 
 * Windowsta konsolda Türkçe karakterleri gösterebilmesi için. 
 * Sonraki açıklamaya dikkat:Windowsta eğer konsol kullanılmazsa gereksiz olabilir. 
 * 
 * */
version(Windows)
{
    import std.c.windows.windows : SetConsoleCP, SetConsoleOutputCP;
    static this()
    {
        SetConsoleCP(65001);
        SetConsoleOutputCP(65001);
    }
}


void main()
{
    auto kullanıcı = KullanıcıAyarları(kullanıcıAdınıAl(),kişiSayısınıAl(),bitmePuanınıAl()); // AÇIKLAMA GELECEK
    auto birEldeAlınanKartlar= birEldekiHerşey();//
    auto toplamPuan= tümEldekiPuan();// AÇIKLAMA GELECEK
    auto kart = yeniDeste();// AÇIKLAMA GELECEK
    auto kartDeğeri = DesteDeğerTanımla(kart);// AÇIKLAMA GELECEK
    OyunKartı[] yerdekiKartlar; // yerdeki kartların bilgisini saklar.
    yerdekiKartlar=dörtOyunKartıAl(kart); // piştiye başlarken 4 tane kartın yere atılmasını sağlar.
    /*
     * Tanımlanan bu değişkenler elindeki kartların bilgisini saklar.
     * 
     * Yerden alınmış kartların bilgisi için gorevli.d birEldekiHerşey yapısına bakınız.
     * */
    OyunKartı[] sendekiKartlar; // sendekiKartlar yani oyuncudaki kartların bilgisini saklar.
    OyunKartı[] bilgisayardakiKartlar; // bilgisayarın kendi kartlarının bilgisini saklar.
    //Eğer oyun 4 kişilik olursa aşağıdaki değişkenler kullanılır. Kullanılmalıdır!!!!!!
    OyunKartı[] bilgisayardakiKartlar2;
    OyunKartı[] bilgisayardakiKartlar3;
    int seçilenKart; // Kullanıcının atmak için seçtiği kart. 1'den 4'e kadar.
    int a; //Test sürecinde değikendeki sayı kadar çalıştırmak için. Daha sonra silinmesi gerekiyor.
    
    /*
     * TASARIM PLANI DİKKAT
     * Dikkat aşağıdaki while döngüsü kartlar bitene kadar dönmelidir. Aşağıdaki döngünün dışında bir döngü daha olmalı o da puan bitene kadar aşağıdaki 
     * döngüyü tekrarlatmalıdır. Yukarıdaki değişkenlerde ona göre iç döngünün dışında veya hem iç hemde dış döngünün dışında tanımlanmalıdır.
     * örneğin kullanıcı değişkeni iki döngününde dışında tanımlanmalıdır.
     * */
    while(toplamPuan.enYüksek<kullanıcı.bitmePuanı,a<10){ /// test için 10 defa en fazla çalıştırılıyor.
     
        ++a;   
       //!!! elin başı sıra Kullanıcıda!!!! 
        yKartlarıGöster(yerdekiKartlar);
       
        if(sendekiKartlar.length==0 && bilgisayardakiKartlar.length==0){
            /*
             * Kart dağıtma işlevi
             * 
             * */
            
            sendekiKartlar=dörtOyunKartıAl(kart);
            bilgisayardakiKartlar=dörtOyunKartıAl(kart);
            /*
             * Bug::Dikkat::
             * 
             * Eğer 4 kişi ile oynanıyorsa son iki kişiyede kart dağıtılmalı ---!!!!-----
             * 
             * */
            
            kartlarDağıtıldı();

       }
        sKartlarıGöster(sendekiKartlar);   
        
        
        yerdekiKartlar~=sendekiKartlar[kullanıcıdanKartAl()-1];
       /* Hatalı Eğer yerdeki kartlar 1 tane ise .... */ 
       if((yerdekiKartlar.length>0)&&(alır_mı(yerdekiKartlar[$-2],yerdekiKartlar[$-1]))){
           
            birEldeAlınanKartlar.birinciOyuncudakiKartlar~=yerdekiKartlar;
            yerdekiKartlar=null;
        
         ///Pişti olup olmadığı buradan denetlenecek ve buradan eklenecek.
        
        }
        
        //!!! Kullanıcının sırası bitti. Sıra bilgisayarda
        
        
        yKartlarıGöster(yerdekiKartlar);
        
        if((yerdekiKartlar.length>0)&&(alır_mı(yerdekiKartlar[$-2],yerdekiKartlar[$-1]))){
           
            birEldeAlınanKartlar.birinciOyuncudakiKartlar~=yerdekiKartlar;
            yerdekiKartlar=null;
            
            ///Pişti olup olmadığı buradan denetlenecek ve buradan eklenecek.

        }
        
        
    }
        
    
    
}
